package com.matrix.async.service;

import java.util.List;
import java.util.Map;

import com.matrix.async.bean.AsyncTaskBean;
import com.matrix.async.core.AsyncTask;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.web.BaseServices;

/**
 * 异步任务service
 * 
 * @author zhangheng
 * @email 512061637@qq.com
 * @date 2019年3月1日
 */
public interface AsyncTaskService {

	/**
	 * 生成异步任务 若createBy为null表示任意机器都可以消费这个任务 若不为null表示只能由创建机器执行
	 * 
	 * @author zhangheng
	 * @email 512061637@qq.com
	 * @date 2019年3月1日
	 * @param crearedBy 
	 * @param taskType 任务类型
	 * @param dataMap 参数map
	 */
	void createTask(String crearedBy, String taskType, Map<String, String> dataMap);

	/**
	 * 查询任务包id
	 * 
	 * @param taskType
	 * @param batchSize
	 * @return
	 */
	List<String> getTaskPackageIdList(String taskType, int batchSize);

	/**
	 * 
	 * @param packageId
	 * @return
	 */
	List<String> getTaskIdList(String packageId);

	/**
	 * 获取任务的数据
	 * 
	 * @param taskId
	 * @return
	 */
	Map<String, String> getTaskDataList(String taskId);

	/**
	 * 把执行成功的任务包写入成功表
	 * 
	 * @param map
	 */
	void backupTaskPackage(String packageId);

	/**
	 * 将超过配置时间还一直处于处理中
	 * 
	 * @param valueOf
	 */
	void recoverOvertimeTask(String valueOf);

	void updateTaskInfo(AsyncTaskBean asyncTaskBean);

	List<AsyncTaskBean> findInPage(AsyncTaskBean task, PaginationVO pageVo);

	Integer findTotal(AsyncTaskBean task);

}
